home *** CD-ROM | disk | FTP | other *** search
- import zlib
- from test_support import TestFailed
- import sys
- import imp
-
- try:
- t = imp.find_module('test_zlib')
- file = t[0]
- except ImportError:
- file = open(__file__)
- buf = file.read() * 8
- file.close()
-
- # test the checksums (hex so the test doesn't break on 64-bit machines)
- print hex(zlib.crc32('penguin')), hex(zlib.crc32('penguin', 1))
- print hex(zlib.adler32('penguin')), hex(zlib.adler32('penguin', 1))
-
- # make sure we generate some expected errors
- try:
- zlib.compress('ERROR', zlib.MAX_WBITS + 1)
- except zlib.error, msg:
- print "expecting", msg
- try:
- zlib.compressobj(1, 8, 0)
- except ValueError, msg:
- print "expecting", msg
- try:
- zlib.decompressobj(0)
- except ValueError, msg:
- print "expecting", msg
-
- x = zlib.compress(buf)
- y = zlib.decompress(x)
- if buf != y:
- print "normal compression/decompression failed"
- else:
- print "normal compression/decompression succeeded"
-
- buf = buf * 16
-
- co = zlib.compressobj(8, 8, -15)
- x1 = co.compress(buf)
- x2 = co.flush()
- try:
- co.flush()
- print "Oops - second flush worked when it should not have!"
- except zlib.error:
- pass
-
- x = x1 + x2
-
- dc = zlib.decompressobj(-15)
- y1 = dc.decompress(x)
- y2 = dc.flush()
- y = y1 + y2
- if buf != y:
- print "compress/decompression obj failed"
- else:
- print "compress/decompression obj succeeded"
-
- co = zlib.compressobj(2, 8, -12, 9, 1)
- bufs = []
- for i in range(0, len(buf), 256):
- bufs.append(co.compress(buf[i:i+256]))
- bufs.append(co.flush())
- combuf = ''.join(bufs)
-
- decomp1 = zlib.decompress(combuf, -12, -5)
- if decomp1 != buf:
- print "decompress with init options failed"
- else:
- print "decompress with init options succeeded"
-
- deco = zlib.decompressobj(-12)
- bufs = []
- for i in range(0, len(combuf), 128):
- bufs.append(deco.decompress(combuf[i:i+128]))
- bufs.append(deco.flush())
- decomp2 = ''.join(bufs)
- if decomp2 != buf:
- print "decompressobj with init options failed"
- else:
- print "decompressobj with init options succeeded"
-
- print "should be '':", `deco.unconsumed_tail`
-
- # Check a decompression object with max_length specified
- deco = zlib.decompressobj(-12)
- cb = combuf
- bufs = []
- while cb:
- max_length = 1 + len(cb)/10
- chunk = deco.decompress(cb, max_length)
- if len(chunk) > max_length:
- print 'chunk too big (%d>%d)' % (len(chunk),max_length)
- bufs.append(chunk)
- cb = deco.unconsumed_tail
- bufs.append(deco.flush())
- decomp2 = ''.join(buf)
- if decomp2 != buf:
- print "max_length decompressobj failed"
- else:
- print "max_length decompressobj succeeded"
-
- # Misc tests of max_length
- deco = zlib.decompressobj(-12)
- try:
- deco.decompress("", -1)
- except ValueError:
- pass
- else:
- print "failed to raise value error on bad max_length"
- print "unconsumed_tail should be '':", `deco.unconsumed_tail`
-
- # Test flush() with the various options, using all the different levels
- # in order to provide more variations.
- sync_opt = ['Z_NO_FLUSH', 'Z_SYNC_FLUSH', 'Z_FULL_FLUSH']
- sync_opt = [getattr(zlib, opt) for opt in sync_opt if hasattr(zlib, opt)]
-
- for sync in sync_opt:
- for level in range(10):
- obj = zlib.compressobj( level )
- d = obj.compress( buf[:3000] )
- d = d + obj.flush( sync )
- d = d + obj.compress( buf[3000:] )
- d = d + obj.flush()
- if zlib.decompress(d) != buf:
- print "Decompress failed: flush mode=%i, level=%i" % (sync,level)
- del obj
-
- # Test for the odd flushing bugs noted in 2.0, and hopefully fixed in 2.1
-
- import random
- random.seed(1)
-
- print 'Testing on 17K of random data'
-
- if hasattr(zlib, 'Z_SYNC_FLUSH'):
-
- # Create compressor and decompressor objects
- c=zlib.compressobj(9)
- d=zlib.decompressobj()
-
- # Try 17K of data
- # generate random data stream
- a=""
- for i in range(17*1024):
- a=a+chr(random.randint(0,255))
-
- # compress, sync-flush, and decompress
- t = d.decompress( c.compress(a)+c.flush(zlib.Z_SYNC_FLUSH) )
-
- # if decompressed data is different from the input data, choke.
- if len(t) != len(a):
- print len(a),len(t),len(d.unused_data)
- raise TestFailed, "output of 17K doesn't match"
-
- def ignore():
- """An empty function with a big string.
-
- Make the compression algorithm work a little harder.
- """
-
- """
- LAERTES
-
- O, fear me not.
- I stay too long: but here my father comes.
-
- Enter POLONIUS
-
- A double blessing is a double grace,
- Occasion smiles upon a second leave.
-
- LORD POLONIUS
-
- Yet here, Laertes! aboard, aboard, for shame!
- The wind sits in the shoulder of your sail,
- And you are stay'd for. There; my blessing with thee!
- And these few precepts in thy memory
- See thou character. Give thy thoughts no tongue,
- Nor any unproportioned thought his act.
- Be thou familiar, but by no means vulgar.
- Those friends thou hast, and their adoption tried,
- Grapple them to thy soul with hoops of steel;
- But do not dull thy palm with entertainment
- Of each new-hatch'd, unfledged comrade. Beware
- Of entrance to a quarrel, but being in,
- Bear't that the opposed may beware of thee.
- Give every man thy ear, but few thy voice;
- Take each man's censure, but reserve thy judgment.
- Costly thy habit as thy purse can buy,
- But not express'd in fancy; rich, not gaudy;
- For the apparel oft proclaims the man,
- And they in France of the best rank and station
- Are of a most select and generous chief in that.
- Neither a borrower nor a lender be;
- For loan oft loses both itself and friend,
- And borrowing dulls the edge of husbandry.
- This above all: to thine ownself be true,
- And it must follow, as the night the day,
- Thou canst not then be false to any man.
- Farewell: my blessing season this in thee!
-
- LAERTES
-
- Most humbly do I take my leave, my lord.
-
- LORD POLONIUS
-
- The time invites you; go; your servants tend.
-
- LAERTES
-
- Farewell, Ophelia; and remember well
- What I have said to you.
-
- OPHELIA
-
- 'Tis in my memory lock'd,
- And you yourself shall keep the key of it.
-
- LAERTES
-
- Farewell.
- """
-